import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.SwingConstants;
import javax.swing.JComboBox;
import javax.swing.JList;
import java.util.HashSet;
import java.util.HashMap;
import java.util.List;

import javax.swing.DefaultListModel;
import javax.swing.JTextArea;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;


/**
 * Fenêtre de saisie d'un ouvrage Code du JFrame généré par Window
 * Builder/Swing Designer.
 * 
 * @author IUT, A.Culet
 * @version 1.0
 */
public class VueSaisieOuvrage extends Vue {

	private JPanel contentPane;
	private JTextField textFieldIsbn;
	private JTextField textFieldTitre;
	private JTextField textFieldDate;
	private JTextField textFieldEditeur;
	private JTextField textFieldAuteur;
	private JButton buttonEnreg;
	private JButton buttonAnnuler;
	HashSet<String> auteurs = new HashSet<String>();
	
	private DefaultListModel mo = new DefaultListModel();
	private DefaultListModel mod = new DefaultListModel();
	private JList ListMotsClee = new  JList(mo);
	private JList ListAuteurs= new JList(mod);


	/**
	 * Create the frame.
	 */
	public VueSaisieOuvrage(Controleur controleur) {
		super(controleur);


		setTitle("Enregistrement d'un nouvel ouvrage");
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		setBounds(100, 100, 754, 460);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);

		JLabel lblNewLabel = new JLabel("Isbn");
		lblNewLabel.setHorizontalAlignment(SwingConstants.RIGHT);
		lblNewLabel.setBounds(46, 54, 61, 15);
		contentPane.add(lblNewLabel);

		textFieldIsbn = new JTextField();
		textFieldIsbn.setBounds(137, 53, 203, 16);
		contentPane.add(textFieldIsbn);
		textFieldIsbn.setColumns(10);

		JLabel lblNewLabel_1 = new JLabel("Titre");
		lblNewLabel_1.setHorizontalAlignment(SwingConstants.RIGHT);
		lblNewLabel_1.setBounds(46, 80, 61, 15);
		contentPane.add(lblNewLabel_1);

		textFieldTitre = new JTextField();
		textFieldTitre.setBounds(137, 79, 203, 16);
		contentPane.add(textFieldTitre);
		textFieldTitre.setColumns(10);

		buttonEnreg = new JButton("Enregistrer");
		buttonEnreg.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String isbn = textFieldIsbn.getText();
				String titre = textFieldTitre.getText();
				String editeur = textFieldEditeur.getText();
				String dateEdition = textFieldDate.getText();
				Object[] mots = ListMotsClee.getSelectedValues();
				getControleur().nouvOuvrage(isbn, titre, auteurs, editeur,
						dateEdition,mots);
			}
		});
		buttonEnreg.setBounds(576, 349, 107, 25);
		contentPane.add(buttonEnreg);

		buttonAnnuler = new JButton("Annuler");
		buttonAnnuler.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				getControleur().fermerVue(VueSaisieOuvrage.this);
			}
		});
		buttonAnnuler.setBounds(447, 349, 107, 25);
		contentPane.add(buttonAnnuler);

		JLabel lblNewLabel_2 = new JLabel("Date édition (MM/AAAA)");
		lblNewLabel_2.setHorizontalAlignment(SwingConstants.RIGHT);
		lblNewLabel_2.setBounds(-23, 122, 154, 33);
		contentPane.add(lblNewLabel_2);

		textFieldDate = new JTextField();
		textFieldDate.setBounds(137, 128, 197, 15);
		contentPane.add(textFieldDate);
		textFieldDate.setColumns(10);

		JLabel lblAuteur = new JLabel("Auteur");
		lblAuteur.setHorizontalAlignment(SwingConstants.RIGHT);
		lblAuteur.setBounds(46, 154, 61, 15);
		contentPane.add(lblAuteur);

		JLabel lblEditeur = new JLabel("Editeur");
		lblEditeur.setHorizontalAlignment(SwingConstants.RIGHT);
		lblEditeur.setBounds(46, 106, 61, 15);
		contentPane.add(lblEditeur);

		textFieldEditeur = new JTextField();
		textFieldEditeur.setColumns(10);
		textFieldEditeur.setBounds(137, 103, 203, 15);
		contentPane.add(textFieldEditeur);

		textFieldAuteur = new JTextField();
		textFieldAuteur.setBounds(137, 152, 203, 17);
		contentPane.add(textFieldAuteur);
		textFieldAuteur.setColumns(10);

		JLabel lblAuteursAjouts = new JLabel("Auteurs ajout\u00E9s :");
		lblAuteursAjouts.setBounds(475, 24, 96, 14);
		contentPane.add(lblAuteursAjouts);

		JButton buttonAjouter = new JButton("Ajouter\r\n");
		buttonAjouter.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				String auteur = textFieldAuteur.getText();
				if (auteur.length() == 0)
				{
					Message dialog = new Message("Ajout impossible");
					dialog.setVisible(true);
				}
				else{
				if (!auteurs.contains(auteur)) {
					auteurs.add(auteur);
					alimente(auteur);
				} else {
					Message dialog = new Message("Auteur deja present");
					dialog.setVisible(true);
				}
				}
				textFieldAuteur.setText(null);
			}
		});

		buttonAjouter.setBounds(358, 152, 72, 19);
		contentPane.add(buttonAjouter);

		ListAuteurs.setModel(mod);
		JScrollPane scrollPan = new JScrollPane();
		scrollPan.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
		scrollPan.setBounds(475, 49, 208, 120);
		scrollPan.setViewportView(ListAuteurs);
		contentPane.add(scrollPan);

		JLabel lblMotscls = new JLabel("Mots-cl\u00E9s");
		lblMotscls.setBounds(137, 240, 76, 15);
		contentPane.add(lblMotscls);
		
		HashSet<MotsClee> mots = getControleur().getMotsClee();
		for (MotsClee mot : mots) {
			mo.addElement(mot.getMot());
		}
		ListMotsClee.setModel(mo);
		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
		scrollPane.setBounds(223, 195, 228, 111);
		scrollPane.setViewportView(ListMotsClee);
		contentPane.add(scrollPane);

	}

	public void alimente(String auteur) {
		mod.addElement(auteur);
	}



	public void setEtat(int etat) {
		switch (etat) {
		case initiale: {
			buttonEnreg.setEnabled(true);
			buttonAnnuler.setEnabled(true);
			break;

		}
		case inter1: {
			this.repaint();
			break;
		}
		}
	}
}
